ggplot2

您所在的位置:网站首页 ggplot2 条形图 颜色 ggplot2

ggplot2

2023-05-26 17:37| 来源: 网络整理| 查看: 265

ggplot2是R语言中最流行的绘图工具包,其风格与基础绘图系统差别很大,且彼此的函数也不能兼容:

通过前面的推文介绍可以看出,基础绘图系统主要是通过一个主函数配合多个辅助函数来完成绘图,各个绘图函数一方面共享来自par函数的参数,另一方面又有各自专用的参数;

ggplot2工具包则是将绘图过程分为创建画布和导入数据、绘制图形、设置标度、要素美化等几个独立的任务,每个函数只完成其中一项任务,然后通过+连接各个类型的函数来完成一幅图形的绘制,具体地,

ggplot函数:创建绘图画布和导入供全局函数使用的数据集;

geom_*系列函数:专门的图形绘制函数或导入仅供该函数使用的数据集;

scale_*系列:专门控制各类要素标度的函数;

theme函数:专门对各类要素进行美化修饰的函数。

ggplot2工具包虽然对各类函数采取了统一的命名方式,但相比基础绘图系统,其函数数量还是显得特别庞大,短时间内很难完全掌握。本篇推文目的在于通过一个绘图案例对ggplot2绘制图形的过程进行一个入门性的介绍。示例数据来自mtcars数据集:

library(ggplot2) data  p p

ggplot函数没有默认的绘制图形;

输出图形可以作为对象赋值给变量,并且该变量还可以打印出图形,这是基础绘图系统所不具备的功能。

2 绘制图形的函数

ggplot2包中专门用于绘制图形的函数均以geom_开头进行命名,如geom_point用于绘制散点图、geom_line绘制折线图,geom_bar绘制条形图,geom_boxplot绘制箱型图,还有geom_hline和geom_vline分别用于绘制水平和垂直的直线,等等。这些函数的后缀基本上和基础绘图系统相应的函数一致。

以散点图和折线图为例,通过+可以很便捷地实现不同图形的叠加:

p +   geom_line() +   geom_point()

geom_*系列的函数能自动继承ggplot设置的数据框和绘图变量信息;

图层叠加的规则是+后的函数绘制的图形在+前的函数绘制的图形之上。

geom_*函数也可以自定义自己所需的绘图变量:

p +   geom_line() +   geom_point(aes(x = wt, y = mpg))

需要注意的是,geom_*系列函数的第一个参数是mapping,第二个参数是data,和ggplot函数是相反的。

在该类函数内可以通过一些参数对图形要素进行美化:

p +   geom_line(linetype = 2, size = 1.2, col = "blue") +   geom_point(shape = 21, size = 3, col = "red", fill = "blue")

还可以通过某个变量对要素进行分组美化,需要使用映射函数aes,如通过cyl变量进行分组:

data$cyl = factor(data$cyl) p  p2 p2

geom_smooth默认的平滑方法是loess,通过method和formula等参数可以进行修改。

使用facet_*函数可以分组绘制子图:

p +    geom_line(linetype = 2, size = 0.8, col = "blue") +   geom_point(shape = 21, size = 3, col = "red", fill = "blue") +   facet_wrap(~ cyl, scales = "free") 3 标签函数

xlab、ylab、ggtitle和labs等函数可以添加图形标签:

xlab和ylab只有label一个参数,用于添加横、纵坐标的标签;

ggtitle函数用于添加图形标题;

labs函数是全能的标签函数。

p2 +   xlab("wt(mtcars)") +   ggtitle(label = "drat ~ wt") +   labs(y = "drat(mtcars)", caption = "R语言学堂") +   ylim(2, 5.5) -> p3 p3 4 标度函数

标度函数主要用于控制各类要素的属性,该类函数一般采取三级命名方法,之间使用下划线隔开,其中第一级均为scale,第二级有如下几种:

scale_alpha_*:透明度标度;

scale_color_*:颜色标度

scale_fill_*:填充颜色标度;

scale_linetype_*:线型标度;

scale_shape_*:点的形状标度;

scale_size_*:点的大小和线的粗细标度;

scale_x_*:横坐标轴标度;

sclae_y_*:纵坐标轴标度。

该类函数是ggplot2包中最复杂的一类函数。前文使用cyl变量将散点的颜色分为三组,这里使用scale_color_manual函数手动指定每组的颜色,使用scale_x_continuous调整横坐标轴的刻度:

p3 +   scale_color_manual(values = c("red", "blue", "green")) +   scale_x_continuous(breaks = seq(1.5, 5.5, 0.5)) -> p4 p4 5 theme函数

theme函数用于对图形要素进行美化,它拥有丰富的参数,命名方式也是遵循逐级命名的规则:

theme(   line,   rect,   text,   title,   aspect.ratio,      axis.title, axis.title.x, axis.title.x.top, ...,      legend.background, legend.margin, legend.spacing, ...,      panel.background, panel.border, panel.spacing,...,      plot.background, plot.title, plot.title.position, ...,     strip.background, strip.background.x, strip.background.y, ...,      ...,   complete = FALSE,   validate = TRUE )

该函数参数较多,这里每类只列举前三个,其余使用省略号表示。

theme函数是如何通过一个参数就对某个要素的颜色、形状、大小等诸多属性进行设置的呢?其实它是使用element_*系列函数进行赋值的,而该类函数又包含若干参数:

element_*系列主要包含四个函数,除element_blank外,其余三个分别针对线状、矩形和文本类要素进行设置:

element_blank: draws nothing, and assigns no space.

如将绘图背景设置为空白:

theme(panel.background = element_blank())

element_line: lines.

element_line(   colour = NULL,   size = NULL,   linetype = NULL,   lineend = NULL,   color = NULL,   arrow = NULL,   inherit.blank = FALSE )

如将横坐标轴的刻度线设置为红色:

theme(axis.ticks.x = element_line(colour = "red"))

element_rect: borders and backgrounds.

element_rect(   fill = NULL,   colour = NULL,   size = NULL,   linetype = NULL,   color = NULL,   inherit.blank = FALSE )

如对图形的背景边框进行调整:

theme(panel.border = element_rect(fill = NA, size = 0.3))

element_text: text.

element_text(   family = NULL,   face = NULL,   colour = NULL,   size = NULL,   hjust = NULL,   vjust = NULL,   angle = NULL,   lineheight = NULL,   color = NULL,   margin = NULL,   debug = NULL,   inherit.blank = FALSE )

如对横坐标的标签进行调整:

theme(axis.text.x = element_text(size = 10)) p4 +   theme( axis.line = element_line(color = "black", size = 0.2),          axis.title = element_text(size = 12),          axis.text = element_text(size = 10),          axis.ticks = element_line(colour = "grey"),                    legend.position = "right",          legend.direction = "vertical",                    panel.background = element_blank(),          panel.border = element_rect(fill = NA, size = 0.3),          panel.grid.major = element_line(linetype = 2, colour = "grey", size = 0.5),                    plot.title = element_text(size = 12, hjust = 0.5)) -> p5 p5 6 保存图形到本地

ggplot2工具包输出图形的函数是ggsave,该函数重要的参数有以下四个:

filename:保存地址和文件名;

width和height:输出图形尺寸;

dpi:输出图片分辨率。

默认保存最后一幅由ggplot2语法绘制的图形:

ggsave(filename = "G:/ggplot.jpeg",        width = 8, height = 5, dpi = 600)

也可以指定保存已经命名的图形对象:

ggsave(p4, filename = "G:/ggplot2.jpeg",        width = 8, height = 5, dpi = 600)

最后附上一幅ggplot2函数的参数清单图:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3